/*
Copyright (C) 2008 raohmaru <http://www.raohmaru.com>

This file is part of Raohmaru AS3 Framework.

Raohmaru AS3 Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Raohmaru AS3 Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Raohmaru AS3 Framework.  If not, see <http://www.gnu.org/licenses/>.
*/

package jp.raohmaru.system.gui 
{
import flash.display.MovieClip;
import flash.events.*;

/**
 * Clase básica para incorporar elementos de la interfaz gráfica a la aplicación.
 * La clase BasicGUI extiende las funcionalidades de la clase EventDispatcher añadiendo un clip como representación gráfica, por lo que una
 * una instancia de BasicGUI en sí no es un objeto de visualización.<br>
 * Aunque puede ser instanciada, el objetivo de esta clase es ser heredada, actuando como una clase abstracta.
 * @author raohmaru
 * @version 1.0.2
 */
public class BasicGUI extends EventDispatcher implements GUI
{
	/**
	 * Objeto DisplayObject interno, interfaz gráfica de la instancia de BasicGUI.
	 */
	protected var _movie :MovieClip;

	/**
	 * @inheritDoc
	 */
	public function get __movie__() : MovieClip
	{
		return _movie;
	}
	
	
	
	/**
	 * Crea una nueva instancia de BasicGUI con el DisplayObject especificado como representación gráfica.
	 * @param movie DisplayObject que será la representación gráfica del objeto BasicGUI
	 */
	public function BasicGUI(movie : MovieClip)
	{
		_movie = movie;
		_movie.addEventListener(Event.REMOVED_FROM_STAGE, onRemove);
		
		init();
	}
	
	/**
	 * @inheritDoc
	 */
	public function init() : void
	{
		
	}
	
	/**
	 * Se invoca cuando el objeto de visualización interno se va a eliminar de la lista de visualización, bien directamente o a través de la eliminación
	 * de un subárbol que contiene el objeto de visualización.
	 * @see flash.display.DisplayObject#removedFromStage
	 */
	protected function onRemove(e : Event) : void
	{
		_movie = null;
		removeEventListener(Event.REMOVED_FROM_STAGE, onRemove);
	}
}
}